/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Server;
import Client.ListaClientes;
import Client.MailClient;
import Client.Message;
import java.io.Serializable;

//import java.lang.String;
/**
 *
 * @author Lab-214-21
 */
   public class MailServer implements Serializable{
    String NameServer;
    
    ListaClientes Clientes;
    public String Nombre()
    {
        return NameServer;
    }      

    public void AdicionarCliente(MailClient cliente)
    {
        Clientes.AdicionarAlUltimo(cliente);
    }
    public MailServer(String Nombre)
    {
        NameServer=Nombre;
        Clientes=new ListaClientes();
    }
    
    public void Post(Message Mensaje)
    {
        String NombreDestino=Mensaje.ObtenerDestinatario().obtenerNombre();
        EnviarMensajeAlDestino(Mensaje, NombreDestino, 0);

    }
    
    private void EnviarMensajeAlDestino(Message Mensaje, String NombreDestino, int n)
    {
        if (n>=Clientes.ObtenerDimension())
            return;
        MailClient ClienteAuxiliar=Clientes.Obtener(n);
            String NombreUsuario=ClienteAuxiliar.ObtenerNombreMiUsuario();
        if(NombreUsuario.equals(NombreDestino))
           {
              ClienteAuxiliar.AdicionarNuevoMensaje(Mensaje);
              return;
           }
         EnviarMensajeAlDestino(Mensaje, NombreDestino, n+1);
    }
    
    public int getMessageWaiting(String name)
    {
         return getMessageWaitingAux(name, 0);

    }
    
    private int getMessageWaitingAux(String name, int i)
    {
        if(i>=Clientes.ObtenerDimension())
            return -1;
        MailClient ClienteAuxiliar=Clientes.Obtener(i);
         if(ClienteAuxiliar.ObtenerNombreMiUsuario()==name)
            {               
                return ClienteAuxiliar.NroMensajesNoLeidos();
            }
         return getMessageWaitingAux(name, i+1);
    }
    
    public String getNextMenssage(String name)
    {
            return getNextMessageAux(name, 0);

    }
    
    private String getNextMessageAux(String name, int i)
    {
        if(i>=Clientes.ObtenerDimension())
            return "";
         MailClient aux=Clientes.Obtener(i);
            
            if(aux.ObtenerNombreMiUsuario()==name)
            {             
                return aux.ReadNextMessage();
            }
         return getNextMessageAux(name, i+1);
    }
    
    public boolean ExisteUsuario(String NombreUsuario)               
    {
      for(int i=0;i<Clientes.ObtenerDimension();i++)
       {
           if(Clientes.Obtener(i).ObtenerNombreMiUsuario().equals(NombreUsuario))
            {             
                return true;
            }    
       }
      return false;
    }
    
    public MailClient ObtenerCliente(String NombreUsuario)
    {
      for(int i=0;i<Clientes.ObtenerDimension();i++)
       {
           if(Clientes.Obtener(i).ObtenerNombreMiUsuario().equals(NombreUsuario))
            {             
                return Clientes.Obtener(i);
            }    
       }
      return null;
    }  
    
    public ListaClientes ObtenerClientes()
     {             
                return Clientes;
      }  
    
    public void EliminarCliente(int i)
     {             
        Clientes.Eliminar(i);
      }          
}
